iT邦幫忙

2023 iThome 鐵人賽

DAY 4
0
Software Development

Go朱尼爾的學習雜記系列 第 5

0x05 變數宣告

  • 分享至 

  • xImage
  •  

今天介紹變數宣告, 變數宣告是寫程式必備的觀念, 以下就來看 go 怎麼宣告變數囉!

1. 目前的 main.go 程式碼

package main

import (
  "fmt"
  "helloworld/pkg" // helloworld 是 mod.go 裡面的專案名稱, 後面pkg就是資料夾路徑
)

func adder(a int, b int) int {
  return a + b
}

func sayHello(){
  fmt.Println("hello world")
}

func main(){
  // sayHello()
  fmt.Println( adder(3, 5) )
  fmt.Println( pkg.Sub(10, 6)) // 這邊就需要使用 pkg這個物件去呼叫Sub函式(至於什麼是物件後面詳述)
}

2. 宣告變數

翻修 main.go

package main

import (
  "fmt"
  "helloworld/pkg" 
)

func main(){

  // fmt.Println( pkg.Sub(10, 6)) 
  
  a := "hello" // 最簡單的宣告方式, := 的功能是類型推導, 不用告訴編譯器a是什麼類型, 他會依據 := 右邊的資料, 自己判斷是什麼類型, 偷懶方便
  
  var b string // 先宣告變數 b , var是關鍵字, 英文全稱是 variable 變數的意思
  b = "world"  // 再賦值給 b
  
  fmt.Println( a + b )
  
}

go run .
預期結果: 顯示 hello world

說明:

  1. 前面忘了介紹 a := "hello" , 這邊我們看到 雙引號 ", 在兩個雙引號內的東西, 會變編譯器識別為字串 string
  2. 寫成是的 = 不是等於的意思, 是 assign, 賦值的意思
  3. 程式設計裡面的等於是 == (就是要判斷兩個東西相等, 後面會詳細介紹判斷式)

3. 更多變數的宣告方式

修改 main.go

package main

import (
  "fmt"
  "helloworld/pkg" 
)

const port = ":5555" // const 表示變數寫死, 後面無法改變port的值, 全域變數, 整個檔案的函式都看得到
var lg = fmt.Println // var 表示一般變數, 此處做了個比較特別的事情, fmt.Println 是一個 function, 我們將function指定給變數lg, 這樣未來我們需要呼叫 fmt.Println的時候, 我們只需要呼叫lg就好了

func main(){

  lg(port)

  // fmt.Println( pkg.Sub(10, 6)) 
  // 其他程式碼先刪掉, 比較容易閱讀
}

執行程式: 印出 :5555

4. 設計個小function來練習函式跟變數

修改 main.go

package main

import (
  "fmt"
  "helloworld/pkg" 
)

const port = ":5555" // const 表示變數寫死, 後面無法改變port的值, 全域變數, 整個檔案的函式都看得到
var lg = fmt.Println // var 表示一般變數, 此處做了個比較特別的事情, fmt.Println 是一個 function, 我們將function指定給變數lg, 這樣未來我們需要呼叫 fmt.Println的時候, 我們只需要呼叫lg就好了

func greetUser(job string, name string) (string, error){
  
  ans := "hello " + job + name

  return ans, nil
}

func main(){

  lg(port)

  greet, _ := greetUser("programmer", "yale")
  lg(greet)

  // fmt.Println( pkg.Sub(10, 6)) 
  // 其他程式碼先刪掉, 比較容易閱讀
}

說明:

  1. var lg = fmt.Println 算是一種比較偏函數式的寫法, 如果覺得怪怪的正常, 主要是自己在寫程式都會這樣, 不然你一長串自太累了, 順便做個分享
  2. greetUser 函式是傳入job跟name, 然後會回傳一個組合好的字串
  3. 但 func greetUser(job string, name string) (string, error) 中我們可以看到, 回傳值有兩個, 分別是string跟error, 怎麼回事?
  4. 這是C語言跟Go語言的錯誤處理方式(Go語言從C語言演化而來), 就是會習慣把function有可能犯錯的狀況, 變成回傳值回傳出去, 這叫做寫程式的「錯誤處理」, 滿多程式語言是用 try catch 來做錯誤處理(java, js, python, etc...), 但golang是這樣做處理, 在此順便簡單帶一下
  5. greet, _ := greetUser("programmer", "yale") 這邊是函式呼叫, 順便把傳回的答案字串以及錯誤, 賦值給greet 以及 _
  6. 什麼是 「_」 呢?就是這個返回值我們一定要接起來, 編譯器材不會報錯, 但是我們卻沒有要處理錯誤的變數, 所以我們用個底線, 就是我們想偷懶的意思啦!
  7. 總之我們成功執行了程式碼了, 印出 ":5555" "hello programmer yale" 的訊息對嗎? 如果遇到問題歡迎聯絡我幫忙debug

上一篇
0x04 怎麼做 package 引入
下一篇
0x06 資料型態 Datatype
系列文
Go朱尼爾的學習雜記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言